/* * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import org.cip.esymons.general.util.ControladorAbstracto;
import cip.util.PaginacionFiltro;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.cip.esymons.tesoreria.bc.CuentaIngresoDelegate;
import org.cip.esymons.tesoreria.bc.GeneracionCuotasDelegate;
import org.cip.esymons.tesoreria.bc.ValorCuentaDelegate;
import org.cip.esymons.tesoreria.be.CuentaIngreso;
import org.cip.esymons.tesoreria.be.ValorCuenta;

/**
 *
 * @author Ingrid Capunay
 */
public class ValorCuentaController extends ControladorAbstracto {

    private ValorCuentaDelegate delegado;
    private MiPaginador paginador;
    private ValorCuenta valorCuenta;
    private GeneracionCuotasDelegate delegadoGeneracionCuotas;
    private CuentaIngresoDelegate cuentaIngresoDelegate;
    private int tipoValorCuenta = 0;
    private Double porcentajeCIPDepa;

    public ValorCuentaController() {
        delegadoGeneracionCuotas = new GeneracionCuotasDelegate();
        cuentaIngresoDelegate = new CuentaIngresoDelegate();
        delegado = new ValorCuentaDelegate();
        paginador = new MiPaginador<ValorCuenta>(null, 20);
        paginador.setFilter("");
    }

    /**
     * @return the cuentaContable
     */
    public ValorCuenta getValorCuenta() {
        return valorCuenta;
    }

    /**
     * @param cuentaContable the cuentaContable to set
     */
    public void setValorCuenta(ValorCuenta valorCuenta) {
        this.valorCuenta = valorCuenta;
    }

    /**
     * @return the tipoValorCuenta
     */
    public int getTipoValorCuenta() {
        return tipoValorCuenta;
    }

    /**
     * @param tipoValorCuenta the tipoValorCuenta to set
     */
    public void setTipoValorCuenta(int tipoValorCuenta) {
        this.tipoValorCuenta = tipoValorCuenta;
    }

    /**
     * @return the porcentajeCIPDepa
     */
    public Double getPorcentajeCIPDepa() {
        return porcentajeCIPDepa;
    }

    /**
     * @param porcentajeCIPDepa the porcentajeCIPDepa to set
     */
    public void setPorcentajeCIPDepa(Double porcentajeCIPDepa) {
        this.porcentajeCIPDepa = porcentajeCIPDepa;
    }

    public final class MiPaginador<k> extends PaginacionFiltro {

        private Date fecini = null;
        private Date fecfin = null;

        public MiPaginador(String action, int cantidad) {
            super(action, cantidad);
        }

        @Override
        public int contar() throws Exception {
            try {
                CuentaIngresoController ci = (CuentaIngresoController) getBean("cuentaIngresoController");
                return delegado.contarPaginadorValorCuenta(ci.getCuentaIngresoSeleccionado().getCinCodigo(), fecini, fecfin);
            } catch (Exception e) {
                return 0;
            }
        }

        @Override
        public List listar() throws Exception {
            try {
                CuentaIngresoController ci = (CuentaIngresoController) getBean("cuentaIngresoController");
                return delegado.paginadorValorCuenta(getPaginador().getCantidadxPagina(), getPaginador().getPosicion(), ci.getCuentaIngresoSeleccionado().getCinCodigo(), fecini, fecfin);
            } catch (Exception e) {
                return new ArrayList();
            }
        }

        public Date getFechIni() {
            return fecini;
        }

        public void setFechIni(Date valor) {
            try {
                if (!valor.equals(fecini)) {
                    fecini = valor;
                    reset();
                }
            } catch (Exception ex) {
                fecini = null;
            }
        }

        public Date getFechFin() {
            return fecfin;
        }

        public void setFechFin(Date valor) {
            try {
                if (!valor.equals(fecfin)) {
                    fecfin = valor;
                    reset();
                }
            } catch (Exception ex) {
                fecfin = null;
            }
        }
    }

    /**
     * @return the paginador
     */
    public MiPaginador getPaginador() {
        return paginador;
    }

    /**
     * @param paginador the paginador to set
     */
    public void setPaginador(MiPaginador paginador) {
        this.paginador = paginador;
    }

    public String nuevo() {
        porcentajeCIPDepa = null;
        valorCuenta = new ValorCuenta();
        return "nuevo";
    }

    public String editar() {
        if (valorCuenta.getVcuMontoObraMin() != null & valorCuenta.getVcuMontoObraMax() != null ) {
            tipoValorCuenta=1;
        }else{
            tipoValorCuenta=0;
        }
        porcentajeCIPDepa = valorCuenta.getVcuPorcentajeCip();
        return "editar";
    }

    public String grabar() {
        CuentaIngresoController ci = (CuentaIngresoController) getBean("cuentaIngresoController");
        ValorCuenta vca = delegado.valorCuentaActual(ci.getCuentaIngresoSeleccionado().getCinCodigo());
        if (vca != null) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(valorCuenta.getVcuFechinicio());
            cal.add(Calendar.DAY_OF_MONTH, -1);
            vca.setVcuFechfin(cal.getTime());
            if (valorCuenta.getVcuFechinicio().compareTo(vca.getVcuFechinicio()) <= 0) {
                ControladorAbstracto.warn("La fecha de inicio no puede ser menor a la fecha de inicio anterior");
                return null;
            }
            delegado.edit(vca);
            
        } 
        valorCuenta.setFkCinCodigo(ci.getCuentaIngresoSeleccionado());
        valorCuenta.setVcuFechregistro(new Date());
        if (tipoValorCuenta == 0) {
            valorCuenta.setVcuMontoObraMin(null);
            valorCuenta.setVcuMontoObraMax(null);            
        } else {
            valorCuenta.setVcuValorVitalicio(null);
            valorCuenta.setVcuValorOtroTipoColegiado(null);
            valorCuenta.setVcuPorcentajeCip(null);
        }        
        
        if (porcentajeCIPDepa!=null){
            valorCuenta.setVcuPorcentajeCip(porcentajeCIPDepa);
        }
        delegado.create(valorCuenta);
        CuentaIngreso cin = valorCuenta.getFkCinCodigo();
        cin.setCinPorcentajecip(valorCuenta.getVcuPorcentajeCip());
        cuentaIngresoDelegate.edit(cin);
        paginador.reset();
        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        cal.set(Calendar.YEAR, 3000);
        delegadoGeneracionCuotas.actualizacionCuotas(ci.getCuentaIngresoSeleccionado().getCinCodigo(), valorCuenta.getVcuFechinicio(),cal.getTime(), valorCuenta.getVcuValor(), valorCuenta.getVcuValorVitalicio());
        ControladorAbstracto.info("Se insertó el nuevo valor Satisfactoriamente.");
        return "buscar";
    }

    public String buscar() {
        paginador.reset();
        return null;
    }

    public String actualizar() {
        if (tipoValorCuenta == 0) {
            valorCuenta.setVcuMontoObraMin(null);
            valorCuenta.setVcuMontoObraMax(null);
        } else {
            valorCuenta.setVcuValor(null);
            valorCuenta.setVcuValorVitalicio(null);
            valorCuenta.setVcuValorOtroTipoColegiado(null);
            valorCuenta.setVcuPorcentajeCip(null);
        }
        if(porcentajeCIPDepa!=null){
            valorCuenta.setVcuPorcentajeCip(porcentajeCIPDepa);
        }
        delegado.edit(valorCuenta);
        CuentaIngreso ci = valorCuenta.getFkCinCodigo();
        ci.setCinPorcentajecip(valorCuenta.getVcuPorcentajeCip());
        cuentaIngresoDelegate.edit(ci);
        paginador.reset();
        if(valorCuenta.getVcuFechfin()!=null){
            delegadoGeneracionCuotas.actualizacionCuotas(valorCuenta.getFkCinCodigo().getCinCodigo(), valorCuenta.getVcuFechinicio(),valorCuenta.getVcuFechfin(), valorCuenta.getVcuValor(), valorCuenta.getVcuValorVitalicio());
        }else{
            Calendar cal = Calendar.getInstance();
            cal.setTime(new Date());
            cal.set(Calendar.YEAR, 3000);
            delegadoGeneracionCuotas.actualizacionCuotas(valorCuenta.getFkCinCodigo().getCinCodigo(), valorCuenta.getVcuFechinicio(),cal.getTime(), valorCuenta.getVcuValor(), valorCuenta.getVcuValorVitalicio());
       }
        ControladorAbstracto.info("Se realizó la actualización satisfactoriamente.");
        return "buscar";
    }

    public String verDetalle() {
        paginador.reset();
        return "buscar";
    }
}
